// 优先级队列 再 队列基础上 优先级越大 先出
class PriorityQueue {
    constructor () {
        this.container = []
        this.maxPriority = 0
    }

    // 进入队列
    enter (val) {
        let len = this.size()
        if (val.priority > this.maxPriority || len === 0) {
            this.container.unshift(val) // 证明优先级目前最高 添加到队列顶部 同时记录当前最大优先级
            this.maxPriority = val.priority
        } else {
            for (let i = len - 1; i >= 0; i--) {
                if (this.container[i].priority >= val.priority) {
                    this.container.splice(i + 1, 0, val)
                    break;
                }
            }
        }
    }

    // 离开队列
    leave () {
        if (!this.size()) return
        return this.container.shift()
    }

    // 队列长度
    size () {
        return this.container.length
    }

    value () {
        return JSON.parse(JSON.stringify(this.container))
    }
}

// 示例

// const pq = new PriorityQueue()
// pq.enter({ name: '第一项', priority: 1 })
// pq.enter({ name: '第二项', priority: 0 })
// pq.enter({ name: '第三项', priority: 0 })
// pq.enter({ name: '第四项', priority: 2 })
// pq.enter({ name: '第五项', priority: 1 })
// pq.enter({ name: '第六项', priority: 0 })
// pq.enter({ name: '第七项', priority: 2 })
// console.log(pq.value())

